import sys
from PySide6.QtWidgets import (QApplication, QMainWindow,
                               QLineEdit,QVBoxLayout,
                               QWidget,QTextBrowser,
                               QPushButton,QHBoxLayout,
                               QFrame)
from PySide6.QtCore import QUrl

import urllib
import os
os.chdir(os.path.dirname(__file__))

class TextBrowser(QMainWindow):
    def __init__(self,parent=None):
        super(TextBrowser, self).__init__(parent)
        self.initUI()
        
    def initUI(self):
        # 创建一个QLineEdit对象，用于输入文本
        self.lineEdit = QLineEdit()
        # 设置QLineEdit的提示文本
        self.lineEdit.setPlaceholderText("在这里添加你想要的数据，回车确认")
        # 设置QLineEdit的回车键按下事件，触发append_text函数
        self.lineEdit.returnPressed.connect(self.append_text)
        
        # 创建一个QTextBrowser对象，用于显示文本
        self.textBrowser = QTextBrowser()
        # 设置QTextBrowser接受富文本
        self.textBrowser.setAcceptRichText(True)
        # 设置QTextBrowser接受外部链接
        self.textBrowser.setOpenExternalLinks(True)
        # 设置QTextBrowser的源为textBrowser.html
        self.textBrowser.setSource(QUrl(r'.\support\textBrowser.html'))
        # 设置QTextBrowser的链接点击事件，触发statusBar的showMessage函数
        self.textBrowser.anchorClicked.connect(lambda url:self.statusBar().showMessage('你点击了url'+urllib.parse.unquote(url.url()),3000))
        # 设置QTextBrowser的historyChanged事件，触发show_anchor函数
        self.textBrowser.historyChanged.connect(self.show_anchor)
        
        
        # 创建一个QPushButton对象，用于返回上一页
        self.back_btn = QPushButton('Back')
        # 创建一个QPushButton对象，用于跳转到下一页
        self.forward_btn = QPushButton('Forward')
        # 创建一个QPushButton对象，用于跳转到首页
        self.home_btn = QPushButton('Home')
        # 创建一个QPushButton对象，用于清空文本框
        self.clear_btn = QPushButton('Clear')        

        # 设置QPushButton的点击事件，触发textBrowser的backward函数
        self.back_btn.pressed.connect(self.textBrowser.backward)
        # 设置QPushButton的点击事件，触发textBrowser的forward函数
        self.forward_btn.pressed.connect(self.textBrowser.forward)
        # 设置QPushButton的点击事件，触发clear_text函数
        self.clear_btn.pressed.connect(self.clear_text)
        # 设置QPushButton的点击事件，触发textBrowser的home函数
        self.home_btn.pressed.connect(self.textBrowser.home)
        
        # 创建一个QVBoxLayout对象，用于布局
        layout = QVBoxLayout()
        # 将QLineEdit添加到QVBoxLayout中
        layout.addWidget(self.lineEdit)
        # 将QTextBrowser添加到QVBoxLayout中
        layout.addWidget(self.textBrowser)
        # 创建一个QFrame对象，用于布局
        frame = QFrame()
        # 将QFrame添加到QVBoxLayout中
        layout.addWidget(frame)
                
        # 创建一个QTextBrowser对象，用于显示文本
        self.text_show = QTextBrowser()
        # 设置QTextBrowser的最大高度
        self.text_show.setMaximumHeight(70)
        # 将QTextBrowser添加到QVBoxLayout中
        layout.addWidget(self.text_show)    

        # 创建一个QHBoxLayout对象，用于布局
        layout_frame = QHBoxLayout()
        # 将QPushButton添加到QHBoxLayout中
        layout_frame.addWidget(self.back_btn)
        layout_frame.addWidget(self.forward_btn)
        layout_frame.addWidget(self.home_btn)
        layout_frame.addWidget(self.clear_btn)
        # 将QHBoxLayout添加到QFrame中
        frame.setLayout(layout_frame)
            
        # 创建一个QWidget对象，用于布局
        widget = QWidget()
        # 将QWidget设置为 centralWidget
        self.setCentralWidget(widget)
        # 将QVBoxLayout添加到QWidget中
        widget.setLayout(layout)
        
        # 设置窗口标题
        self.setWindowTitle('QTextBrowser 案例')
        # 设置窗口位置
        self.setGeometry(300, 300, 300, 300)
        # 显示窗口
        self.show()
        
        
    def append_text(self):
        # 获取QLineEdit中的文本
        text = self.lineEdit.text()
        # 将文本添加到QTextBrowser中
        self.textBrowser.append(text)
        # 清空QLineEdit中的文本
        self.lineEdit.clear()   
        
        
    def show_anchor(self):
        # 获取QTextBrowser中上一个url
        back = urllib.parse.unquote(self.textBrowser.historyUrl(-1).url())
        # 获取QTextBrowser中当前url
        now = urllib.parse.unquote(self.textBrowser.historyUrl(0).url())
        # 获取QTextBrowser中下一个url
        forward = urllib.parse.unquote(self.textBrowser.historyUrl(1).url())
        # 拼接文本
        _str = f'上一个url:{back},<br>当前url:{now},<br>下一个url:{forward}'
        # 将文本添加到QTextBrowser中
        self.text_show.setText(_str)
    
    def clear_text(self):
        # 清空QTextBrowser中的文本
        self.textBrowser.clear()
    
if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_window = TextBrowser()
    main_window.show()
    sys.exit(app.exec())